﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ComunesMGI.DataTypes;

namespace MGI.Logica
{
    class CtrIncidentes:IIncidentes
    {

        #region IIncidentes Members

        public List<DataCampo> getCampos(DataCliente cliente, DataSistema sistema) 
        {
            MgrClientes mgrCliente = MgrClientes.getInstance();
            if( mgrCliente.containFileCliente(cliente))
            {
                MgrSistemas mgrSistema = MgrSistemas.getInstance();
                if (mgrSistema.containSistema(cliente, sistema))
                {
                    MgrIncidentes mgrIncidentes = MgrIncidentes.getInstance();
                    return mgrIncidentes.getCampos(cliente, sistema);
                }
                else 
                {
                    throw new Exception("No existe el sistema para el cliente seleccionado");
                }
            }
            else
            {
                throw new Exception("No existe el cliente");
            }

            
        }

        public DataAltaIncidente addIncidente(DataSistema incidente, List<DataAttachment> archivos)
        {
            MgrIncidentes mgrIncidentes = MgrIncidentes.getInstance();
            return mgrIncidentes.addIncidente(incidente, archivos);
        }

        public List<DataIncidente> getIncidentes(DataCliente cliente, DataSistema sistema)
        {
            MgrIncidentes mgrIncidentes = MgrIncidentes.getInstance();
            return mgrIncidentes.getIncidentes(cliente, sistema);
            
        }

        public List<DataTarea> getTareas(DataCliente cliente, DataSistema sistema, DataIncidente incidente)
        {
            MgrIncidentes mgrIncidentes = MgrIncidentes.getInstance();
            return mgrIncidentes.getTareas(cliente, sistema, incidente);
        }

        public bool asignarResponsable(DataSistema sistema, DataIncidente incidente, DataTarea tarea, DataUsuario usuario)
        {
            MgrIncidentes mgrIncidentes = MgrIncidentes.getInstance();
            string mail = mgrIncidentes.asignarResponsable(sistema, incidente, tarea, usuario);
            //se deben pasar todos los datos para enviar el mail
            return MgrUsuarios.getInstance().EnviarMailAsignarTarea(mail,usuario,tarea,incidente);

        }

        public bool addWorkPackage(DataCliente cliente, DataSistema sistema, DataWP workPackage) 
        {
            MgrIncidentes mgrIncidentes = MgrIncidentes.getInstance();
            return mgrIncidentes.addWorkPackage( cliente, sistema, workPackage);
        }

        public List<DataWP> getWorkPackages(DataCliente cliente, DataSistema sistema) 
        {
            MgrIncidentes mgrIncidentes = MgrIncidentes.getInstance();
            return mgrIncidentes.getWorkPackages(cliente, sistema);
        }

        public void asociarIncidenteWP(DataCliente cliente, DataSistema sistema, DataWP workPackage, List<DataIncidente> incidentes)
        {
            MgrIncidentes mgrIncidentes = MgrIncidentes.getInstance();
            mgrIncidentes.asociarIncidenteWP( cliente,  sistema,  workPackage, incidentes);
        }

        public List<DataIncidenteReporte> getIncidentesCerradosPeriodo(List<DataSistema> sistemas, DateTime perFchIni, DateTime perFchFin)
        {
            MgrIncidentes mgrIncidentes = MgrIncidentes.getInstance();
            return mgrIncidentes.getIncidentesCerradosPeriodo(sistemas, perFchIni, perFchFin);
        }

        public List<DataIncidente> getIncidentesWP(DataSistema sistema, DataWP workPackage) 
        {
            MgrIncidentes mgrIncidentes = MgrIncidentes.getInstance();
            return mgrIncidentes.getIncidentesWP(sistema, workPackage);
        }

        public bool adjuntarArchivoIncidente(string nombreArchivo, DataSistema sistema, DataIncidente incidente, string nroTemp) 
        {
            MgrIncidentes mgrIncidentes = MgrIncidentes.getInstance();
            return mgrIncidentes.adjuntarArchivoIncidente( nombreArchivo,  sistema,  incidente, nroTemp);
        }
        #endregion
    }
}
